package com.briup.day10;

public class FinalTest {
    public static void main(String[] args) {
        /*
        final：是Java中的一个关键字，是修饰符，表示最终的
            final能够修饰类、变量、方法
               1、final修饰类，表示该类为最终类，即该类不能被继承
               2、final修饰方法，表示该方法为最终方法实现，
               即该方法不能被重写，和static修饰的静态方法一样，
               能够被子类继承访问，但是子类不能对其进行重写
               3、final修饰变量，表示该变量为不可修改的常量，
               是从语法层面限制变量所对应的内存空间存储的值不可变；
               因为final修饰的变量不可变，所以该变量要求我们在定义时，
               必须给其赋值
         */
    }
}

class Father {
    public void method() {
        System.out.println("这是父类的method方法");
    }
}

// 如果Father类被final关键字修饰，那么就从语法层面限定了该类不能被继承
class Son extends Father {
    // final修饰成员变量，在该变量所在对象初始化必须显示的给其赋值
    private final String name = "";
    // final修饰静态变量，在使用前必须给其赋值，需要注意在构造器中不能给其赋值，
    // 因为静态变量/类变量无需创建对象就能调用;
    // 被static和final同时修饰的成员变量，通常指常量，我们在定义其名称时，使用大写字母命名，
    // 如果是多个单词，那么使用_进行连接
    private static final String STATIC_ID = "";

    // 子类在重写父类方法时，可以将方法定义为final修饰
    // 父类的方法被定义为final修饰后，其子类无法重写该方法
    public final void method() {
        System.out.println("这是子类的method方法");
    }

    public static void main(String[] args) {
        // final修饰的变量变成了常量，
        // 即在后续使用时不能修改该变量的值
        final int a = 10;
//        a = 100;
    }
}